package com.zhangjingcheng.yunyixia.service;

import com.zhangjingcheng.yunyixia.pojo.dto.*;
import com.zhangjingcheng.yunyixia.pojo.entity.User;
import com.zhangjingcheng.yunyixia.pojo.vo.AllUserVO;
import com.zhangjingcheng.yunyixia.pojo.vo.UserLoginVO;
import com.zhangjingcheng.yunyixia.pojo.vo.UserSpaceVO;
import com.zhangjingcheng.yunyixia.result.PageResult;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;

public interface UserService {

    /**
     * 根据邮箱查询用户信息
     *
     * @param email 邮箱
     * @return 用户信息
     */
    User findUserByEmail(String email);

    /**
     * 根据昵称查询用户信息
     *
     * @param nickName 昵称
     * @return 用户信息
     */
    User findUserByNickName(String nickName);

    /**
     * 根据QQ的OpenId查询用户信息
     * @param qqOpenId
     * @return
     */
    User findUserByQqOpenId(String qqOpenId);

    /**
     * 用户注册
     * @param dto
     * @return
     */
    void register(UserRegisterDTO dto);

    /**
     * 用户登录
     * @param dto
     * @return
     */
    UserLoginVO login(UserLoginDTO dto);

    /**
     * 重置密码
     * @param dto
     * @return
     */
    void resetPwd(UserLoginDTO dto);

    /**
     * 获取用户空间信息
     * @return
     */
    UserSpaceVO getUserSpace();
    
    /**
     * 用户退出登录
     */
    void logout(String token);

    /**
     * 获取用户头像
     * @return
     */
    String getUserAvatar();

    /**
     * 更新用户头像
     * @param avatarUrl
     */
    void updateAvatar(String avatarUrl);

    /**
     * 更新用户密码
     * @param dto
     */
    void updatePwd(UpdatePwdDTO dto);

    /**
     * QQ登录
     *
     * @param code
     * @return
     */
    ModelAndView qqLogin(String code, HttpServletResponse response, HttpSession session);

    /**
     * 获取用户信息
     *
     * @return
     */
    UserLoginVO getUserInfo(HttpSession session);

    /**
     * 分页获取所有用户信息
     *
     * @param dto
     * @return
     */
    PageResult<AllUserVO> getAllUserInfo(AllUserDTO dto);

    /**
     * 更新用户状态
     *
     * @param id
     */
    void updateUserStatus(Integer id);

    /**
     * 更新总用户总空间
     *
     * @param dto
     */
    void updateUserTotalSpace(UpdateUserTotalSpaceDTO dto);

    /**
     * 用户重命名
     *
     * @param name
     */
    void userRename(String name);
}
